#! /bin/bash

#script de instalacion

#Definicion de vaiables

nombre_aplicacion="RESER_A"
user=`eval whoami`

instalacion_existe=0
integridad_paquete=0
instalar=0


grupo=~/grupo11
CONFDIR=$grupo/conf
archivo_conf=$CONFDIR/Instalar_TP.conf


archivos="Iniciar_A.sh Grabar_L.sh"
archivos_bin="Imprimir_A.pl Mover_A.sh Recibir_A.sh Reservar_A.sh Start_A.sh Stop_A.sh RESER_A.sh"
archivos_mae="obras.mae salas.mae" 
archivos_conf="Instalar_TP.conf"
archivos_proc="combos.dis"

declare -a archivos_faltantes=()
declare -a archivos_bin_faltantes=()
declare -a archivos_mae_faltantes=()
declare -a archivos_conf_faltantes=()
declare -a archivos_proc_faltantes=()
declare -a directorios_faltantes=()

validacion_log=0

BINDIR=$grupo/bin
MAEDIR=$grupo/mae
ARRIDIR=$grupo/arribos
DATASIZE="100"
ACEPDIR=$grupo/aceptados
RECHDIR=$grupo/rechazados
REPODIR=$grupo/listados
PROCDIR=$grupo/procesados
LOGDIR=$grupo/log
LOGEXT="log" 
LOGSIZE="400"

#Definicion de functiones

#Inicializa el archivo de log de instalacion
function f_inicializar_log()
{
	msg="Inicio de Ejecución"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	msg="Log del Comando Instalar_TP: $CONFDIR/Instalar_TP.log"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	msg="Directorio de Configuración: $CONFDIR"
 	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}

#Verifica si el paquete esta instalado
#Setea $instalacion_existe
function f_detectar_instalacion()
{
	chmod 777 "$PWD/Grabar_L.sh"

	if [ -f $archivo_conf ]; then
		instalacion_existe=1

		msg="$nombre_aplicacion ya esta instalado"
 		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
	fi
	
	return 0
}

function f_listar_archivos()
{
	directorio=$1
	
	if [ -d "$directorio" ]; then
	
		declare -a arr=(`ls "$directorio"`)
	
		for i in ${arr[@]}
		do
		   echo "$i"
		done
	fi
}

#Espera que usuario confirma o rechaze la accion.
#Setea $confirmado
function f_esperar_respuesta()
{
	ingresado=0
	read respuesta
	# Corroboro que ingrese Si o No
	while [ $ingresado -ne 1 ]; do
		if [ -z $respuesta ]; then
			echo "Debe ingresar 's/S'(Sí) o 'n/N'(No). Intente nuevamente: "
			read respuesta
			continue;
		fi
		
		if [ $respuesta != "s" -a  $respuesta != "n" -a $respuesta != "S" -a $respuesta != "N" ]; then
			echo "Debe ingresar 's/S'(Sí) o 'n/N'(No). Intente nuevamente: "
			read respuesta
		else
			ingresado=1
		fi 
	done

	if [ $respuesta = "s" -o $respuesta = "S" ]; then
		confirmado=1
		msg="Si"
		./Grabar_L.sh Instalar_A "$msg" -i
	else
		confirmado=0
		msg="No"
		./Grabar_L.sh Instalar_A "$msg" -i
	fi
}

function f_mostrar_componentes()
{
	msg="SO7508 Segundo Cuatrimestre 2013. Tema A Copyright © Grupo 11"
 	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Librería del Sistema: $CONFDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Contenido de Librería del Sistema: 
`f_listar_archivos $CONFDIR`"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Ejecutables: $BINDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Contenido de Ejecutables: 
`f_listar_archivos $BINDIR`"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i 
	msg="Archivos maestros: $MAEDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Contenido de Archivos maestros: 
`f_listar_archivos $MAEDIR`"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Directorio de arribo de archivos externos: $ARRIDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Archivos externos aceptados: $ACEPDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Archivos externos rechazados: $RECHDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Reportes de salida: $REPODIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Archivos procesados: $PROCDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Contenido de Procesados:
`f_listar_archivos $PROCDIR`"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Logs de auditoría del Sistema: $LOGDIR/<comando>.$LOGEXT"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Tamaño máximo de archivos de log: $LOGSIZE"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
}

function f_mostrar_componentes_faltantes()
{
	if [ ${#directorios_faltantes[@]} -gt 0 ]; then
		
		msg="Directorios faltantes:"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		
		for i in ${directorios_faltantes[@]}; do
			msg=$i
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i
		done
	fi
	
	if [ ${#archivos_conf_faltantes[@]} -gt 0 ]; then
		
		msg="Archivos faltantes en Librería del Sistema:"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		
		for i in ${archivos_conf_faltantes[@]}; do
			msg=$i
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i
		done
	fi
	
	if [ ${#archivos_bin_faltantes[@]} -gt 0 ]; then
		
		msg="Archivos faltantes en Ejecutables:"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i

		for i in ${archivos_bin_faltantes[@]}; do
			msg=$i
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i
		done
	fi

	if [ ${#archivos_mae_faltantes[@]} -gt 0 ]; then
	
		msg="Archivos faltantes en Archivos maestros:"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		
		for i in ${archivos_mae_faltantes[@]}; do
			msg=$i
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i
		done
	fi
	
	if [ ${#archivos_proc_faltantes[@]} -gt 0 ]; then
		
		msg="Archivos faltantes en Procesados:"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i		

		for i in ${archivos_proc_faltantes[@]}; do
			msg=$i
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i			
		done
	fi
	
	if [ ${#archivos_faltantes[@]} -gt 0 ]; then
		
		msg="Otros archivos faltantes:"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i

		for i in ${archivos_faltantes[@]}; do
			msg=$i
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i
		done
	fi
	return 0
}

#Verifica integridad de paquete instalado
#Setea $integridad_paquete
function f_verificar_paquete()
{
	if ! [ -d "$BINDIR" ]; then
		directorios_faltantes+=("$BINDIR")
	else
		declare -a arr=($archivos_bin)
		for i in ${arr[@]}; do
			if ! [ -f "$BINDIR/$i" ]; then
				archivos_bin_faltantes+=($i)
			fi	   
		done
	fi 

	if ! [ -d "$MAEDIR" ]; then
		directorios_faltantes+=("$MAEDIR")
	else
		declare -a arr=($archivos_mae)
		for i in ${arr[@]}; do
			if ! [ -f "$MAEDIR/$i" ]; then
				archivos_mae_faltantes+=($i)
			fi	   
		done
	fi

	if ! [ -d "$ARRIDIR" ]; then
		directorios_faltantes+=("$ARRIDIR")
	fi

	if ! [ -d "$ACEPDIR" ]; then
		directorios_faltantes+=("$ACEPDIR")
	fi

	if ! [ -d "$RECHDIR" ]; then
		directorios_faltantes+=("$RECHDIR")
	fi

	if ! [ -d "$REPODIR" ]; then
		directorios_faltantes+=("$REPODIR")
	fi	

	if ! [ -d "$PROCDIR" ]; then
		directorios_faltantes+=("$PROCDIR")
	else
		declare -a arr=($archivos_proc)
		for i in ${arr[@]}; do
			if ! [ -f "$PROCDIR/$i" ]; then
				archivos_proc_faltantes+=($i)
			fi	   
		done
	fi

	if ! [ -d "$LOGDIR" ]; then
		directorios_faltantes+=("$LOGDIR")
	fi

	declare -a arr=($archivos)
	for i in ${arr[@]}; do
		if ! [ -f "$grupo/$i" ]; then
			archivos_faltantes+=($i)
		fi	   
	done

	declare -a arr=($archivos_conf)
	for i in ${arr[@]}; do
		if ! [ -f "$CONFDIR/$i" ]; then
			archivos_conf_faltantes+=($i)
		fi	   
	done
	
	if [ ${#directorios_faltantes[@]} -gt 0 -o ${#archivos_faltantes[@]} -gt 0 -o ${#archivos_bin_faltantes[@]} -gt 0 -o ${#archivos_mae_faltantes[@]} -gt 0 -o ${#archivos_conf_faltantes[@]} -gt 0 -o ${#archivos_proc_faltantes[@]} -gt 0 ]; then
		integridad_paquete=0
	else
		integridad_paquete=1
	fi		
}

#Pide aceptar terminos y condiciones
#Setea $instalar
function f_aceptar()
{
	msg="SO7508 Segundo Cuatrimestre 2013. Tema A Copyright © Grupo 11"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg=""
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i	

	msg="A T E N C I O N: Al instalar TP SO7508 Segundo Cuatrimestre 2013"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="UD. expresa aceptar los terminos y Condiciones del"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg='"ACUERDO DE LICENCIA DE SOFTWARE" incluido en este paquete.'
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
		
	msg=""
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="?Acepta condiciones? (S/N)"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	f_esperar_respuesta
	
	# Decido el flujo según la elección del usuario
	if [ $confirmado -eq 1 ]; then
		msg="Condiciones Aceptadas"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		
		instalar=1
	else
		msg="No fueron Aceptadas las Condiciones y términos"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		
		instalar=0
	fi
	return 0
}

#Verifique si la corecta version de Perl esta instalada
#Setea $instalar
function f_version_perl()
{
	# Buscamos Perl en los directorios tipicos.
	if [ -x /usr/local/bin/perl ]; then
		perl=/usr/local/bin/perl
	elif [ -x /usr/bin/perl ]; then
		perl=/usr/bin/perl
	else
		perl=""
		msg="Error Perl: No se ha encontrado el interprete, o el path es erroneo."
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
	fi
	     
	$perl -e 'exit ($] < 5.00 ? 1 : 0)'
	if [ $? = "1" ]; then
		msg="
TP SO7508 Segundo Cuatrimestre 2013. Tema A Copyright © Grupo 11
Para instalar el TP es necesario contar con  Perl 5 o superior instalado. Efectúe su instalación e inténtelo nuevamente. 
Proceso de Instalación Cancelado"

		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		
		instalar=0
	else
		msg="Perl Instalado y con versión correcta."
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		instalar=1
	fi
	return 0
}

function f_path_relativo()
{
	from_path="$1"
	full_path="$2"
	
	tail_path=${full_path#*${from_path}*}
	echo "$from_path/..$tail_path"
	return 0
}


#Define el directorio de instalación de los ejecutables
#Setea $BINDIR
function f_directorio_ejecutables()
{
	msg="Defina el directorio de instalación de los ejecutables (`f_path_relativo $grupo $BINDIR`):"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	read bindir
	if ! [ -z $bindir ]; then
    	BINDIR=$grupo/$bindir	
	fi
	
	msg="Directorio de los ejecutables definido: $BINDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}

#Define el directorio los archivos maestros
#Setea $MAEDIR
function f_directorio_maestros()
{
	msg="Defina el directorio de instalación de los archivos maestros (`f_path_relativo $grupo $MAEDIR`):"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i


	read maedir
	if ! [ -z $maedir ]; then
    	MAEDIR=$grupo/$maedir	
	fi
	
	msg="Directorio de los archivos maestros definido: $MAEDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}

#Define el directorio de arribo de archivos externos
#Setea $ARRIDIR
function f_directorio_externos()
{
	msg="Defina el directorio de arribo de archivos externos (`f_path_relativo $grupo $ARRIDIR`):"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	
	read arridir
	if ! [ -z $arridir ]; then
    	ARRIDIR="$grupo/$arridir"
	fi
	
	msg="Directorio de arribo de los archivo externos definido: $ARRIDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i


	return 0
}

#Define espacio mínimo necesario para datos(en directorio ARRIDIR)
function f_definir_espacio_minimo()
{
	espacio_definido=0
	
	while [ $espacio_definido -eq 0 ]; do	
	
		msg="Defina el espacio mínimo libre para el arribo de archivos externos en Mbytes ($DATASIZE):"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i

		read datasize
	
		if ! [ -z $datasize ]; then
			re='^[0-9]+$'
			if ! [[ $datasize =~ $re ]]; then
				msg="'$datasize' no es un numero! Intentelo de nuevo."
				echo $msg
				./Grabar_L.sh Instalar_A "$msg" -i

			else
				DATASIZE=$datasize
				espacio_definido=1			
			fi
		else
			

			espacio_definido=1
		fi
	done

	msg="Espacio minimo libre para el arribo de archivos externos definido: $DATASIZE Mbytes"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	
	return 0
}

#Verifica si en ARRIDIR hay DATASIZE de espacio libre
#Si se verifica espacio setea espacio_verificado como verificado
function f_verificar_espacio_libre()
{
	msg="Verificando espacio en disco..."
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	
	espacio_libre=`df -P "$PWD" -B M | awk 'NR==2{ print $4}' | awk -F'[M]' '{print $1}'`
	
	T1=$DATASIZE
	T2=$espacio_libre
        
	if [ $T1 -gt $T2 ]; then
		msg="
Insuficiente espacio en disco. 
Espacio disponible: $espacio_libre Mb. 
Espacio requerido $DATASIZE Mb
Cancele la instalación e inténtelo mas tarde o vuelva a intentarlo con otro valor."
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		espacio_verificado=0
	else
		msg="Espacio en disco verificado."
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		espacio_verificado=1
	fi
	return 0
}

#Define el espacio mínimo libre para el arribo de archivos externos
#Setea $DATASIZE
#Setea $instalar 
function f_espacio_minimo()
{
	espacio_verificado=0
	confimado=1	

	while [ $espacio_verificado -eq 0 -a $confimado -eq 1 ]; do
		f_definir_espacio_minimo
		f_verificar_espacio_libre
		
		if [ $espacio_verificado -eq 0 ]; then
			msg="
Cancele la instalación e inténtelo mas tarde o vuelva a intentarlo con otro valor.
Desea cambiar el espacio minimo requerido seteado a $DATASIZE Mb (s/n):"
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i
			f_esperar_respuesta
		fi	
	done;

	if [ $espacio_verificado -eq 1 ]; then
		msg="Minimo espacio definido es de: $DATASIZE Mb"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i

	else
		msg="Minimo espacio no fue definido"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		instalar=0
	fi
	return 0
}

#Define el directorio de grabación de los archivos aceptados
#Setea $ACEPDIR
function f_directorio_aceptados()
{
	msg="Defina el directorio de grabación de los archivos externos aceptados (`f_path_relativo $grupo $ACEPDIR`):"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	
	read acepdir
	if ! [ -z $acepdir ]; then
    	ACEPDIR="$grupo/$acepdir"
	fi
	
	msg="Directorio de los archivos aceptados definido: $ACEPDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	
	return 0
}

#Define el directorio de grabación de los archivos rechazados
#Setea $RECHDIR
function f_directorio_rechazados()
{
	msg="Defina el directorio de grabación de los archivos externos rechazados (`f_path_relativo $grupo $RECHDIR`):"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	read rechdir
	if ! [ -z $rechdir ]; then
    	RECHDIR="$grupo/$rechdir"
	fi
	
	msg="Directorio de los archivos rechazados definido: $RECHDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}

#Define el directorio de trabajo principal del proceso Reservar_A
#Setea $PROCDIR
function f_directorio_procesados()
{
	msg="Defina el directorio de grabación de los archivos procesados (`f_path_relativo $grupo $PROCDIR`):"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	read procdir
	if ! [ -z $procdir ]; then
    	PROCDIR="$grupo/$procdir"
	fi
	
	msg="Directorio de los archivos procesados definido: $PROCDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}

#Define el directorio de grabación de los LISTADOS de salida
#Setea $REPODIR
function f_directorio_listados()
{
	msg="Defina el directorio de grabación de los listados de salida (`f_path_relativo $grupo $REPODIR`):"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	read repodir
	if ! [ -z $repodir ]; then
    	REPODIR=$grupo/$repodir	
	fi
	
	msg="Directorio de grabación de los LISTADOS de salida definido: $REPODIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}
	


#Define el directorio de logs para los comandos 
#Setea $LOGDIR
function f_directorio_log()
{
	msg="Defina el directorio de logs (`f_path_relativo $grupo $LOGDIR`):"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	read logdir
	if ! [ -z $logdir ]; then
    	LOGDIR=$grupo/$logdir	
	fi
	
	msg="Directorio de log definido: $LOGDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}


#Define la extensión y el tamaño máximo para los archivos de log
#Setea LOGEXT
#Setea LOGSIZE
function f_ext_size_log()
{
	msg="Ingrese la extensión para los archivos de log: (.$LOGEXT)"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i	

	read logext
	if ! [ -z $logext ]; then
    	LOGEXT=$logext
	fi
	
	msg="Extensión <$LOGEXT> para los archivos de Log definido."
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	logsize_definido=0
	
	while [ $logsize_definido -eq 0 ]; do	

		msg="Defina el tamaño máximo para los archivos .$LOGEXT en Kbytes ($LOGSIZE):"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i

		read logsize
	
		if ! [ -z $logsize ]; then
			re='^[0-9]+$'
			if ! [[ $logsize =~ $re ]]; then
				msg="'$logsize' no es un numero! Internelo de nuevo."
				echo $msg
				./Grabar_L.sh Instalar_A "$msg" -i
			else
				LOGSIZE=$logsize
				logsize_definido=1			
			fi
		else
			logsize_definido=1
		fi	
	done;

	msg="Tamaño máximo para los archivos .$LOGEXT definido: $LOGSIZE"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}

#Muestra estructura de directorios resultante y valores de parámetros configurados
function f_mostrar_definiciones()
{
	msg="SO7508 Segundo Cuatrimestre 2013. Tema A Copyright © Grupo 11"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Librería del Sistema: $CONFDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i 
	msg="Ejecutables: $BINDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i 
	msg="Archivos maestros: $MAEDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i 
	msg="Directorio de arribo de archivos externos: $ARRIDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Espacio mínimo libre para arribos: $DATASIZE Mb"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Archivos externos aceptados: $ACEPDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Archivos externos rechazados: $RECHDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Archivos procesados: $PROCDIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Reportes de salida: $REPODIR"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Logs de auditoria del Sistema: $LOGDIR/<comando>.$LOGEXT"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	msg="Tamaño máximo para los archivos de log del sistema: $LOGSIZE Kb"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	return 0
}

#Confirma Inicio de Instalación
function f_confirmar_instalacion()
{
	msg="Iniciando Instalación. Esta Ud. seguro? (S\N)"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
 
	f_esperar_respuesta
	
	if [ $confirmado -eq 1 ]; then
		msg="Procediendo con la instalación"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
	else
		msg="Se cancelo la instalación"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
	fi
	return 0 
}

#Crea un directorio que no existe
function f_crear_directorio()
{
	if ! [ -d $1 ]; then
		mkdir $1
		msg="Directorio $1 fue creado."
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
	fi
	return 0
}

function f_copiar_arhicvos()
{
	to="$1"
	from="$2"
	declare -a arr=("$3")
	permios="$4"

	for i in ${arr[@]}; do
		if ! [ -f "$to/$i" ]; then
			cp "$from/$i" "$to"
			if [ $permios -eq 1 ]; then
				chmod 777 "$to/$i"
			fi
			msg="Archivo $i fue copiado."
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i
		fi	   
	done
	return 0
}

#Instala componentes necesarios
#This is Instalation Baby! :)
function f_instalacion()
{
	msg="Creando Estructuras de directorio. . . ."
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	
	f_crear_directorio $grupo
	f_crear_directorio $BINDIR
	f_crear_directorio $MAEDIR
	f_crear_directorio $ARRIDIR
	f_crear_directorio $ACEPDIR
	f_crear_directorio $RECHDIR
	f_crear_directorio $PROCDIR
	f_crear_directorio $REPODIR
	f_crear_directorio $LOGDIR

	msg="Instalando Archivos Maestros. . . ."
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	
	f_copiar_arhicvos "$MAEDIR" "$PWD/MAEDIR" "$archivos_mae" 0 	

	msg="Instalando Archivo de Disponibilidad. . . ."
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	f_copiar_arhicvos "$PROCDIR" "$PWD/PROCDIR" "$archivos_proc" 0 	

	msg="Instalando Programas y Funciones. . . ."
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	f_copiar_arhicvos "$BINDIR" "$PWD/BINDIR" "$archivos_bin" 0 
	
	msg="Instalando Archivos Auxilares. . . ."
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i

	f_copiar_arhicvos "$grupo" "$PWD" "$archivos" 1 
	
	if ! [ $instalacion_existe -eq 1 ]; then
		msg="Actualizando la configuración del sistema. . . ."
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		f_escribir_config
	fi
}

function f_leer_config()
{
	CONFDIR=`grep '^CONFDIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	BINDIR=`grep '^BINDIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	MAEDIR=`grep '^MAEDIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	ARRIDIR=`grep '^ARRIDIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	DATASIZE=`grep '^DATASIZE' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	ACEPDIR=`grep '^ACEPDIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	RECHDIR=`grep '^RECHDIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	REPODIR=`grep '^REPODIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	PROCDIR=`grep '^PROCDIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	LOGDIR=`grep '^LOGDIR' "$archivo_conf" | awk -F'[=]' '{print $2}'`
	LOGEXT=`grep '^LOGEXT' "$archivo_conf" | awk -F'[=]' '{print $2}'` 
	LOGSIZE=`grep '^LOGSIZE' "$archivo_conf" | awk -F'[=]' '{print $2}'`  
}

function f_escribir_config()
{
	echo "GRUPO=$grupo=$user=`date`" >> "$archivo_conf"
	echo "CONFDIR=$CONFDIR=$user=`date`" >> "$archivo_conf"
	echo "BINDIR=$BINDIR=$user=`date`" >> "$archivo_conf"
	echo "MAEDIR=$MAEDIR=$user=`date`" >> "$archivo_conf"
	echo "ARRIDIR=$ARRIDIR=$user=`date`" >> "$archivo_conf"
	echo "ACEPDIR=$ACEPDIR=$user=`date`" >> "$archivo_conf"
	echo "RECHDIR=$RECHDIR=$user=`date`" >> "$archivo_conf"
	echo "REPODIR=$REPODIR=$user=`date`" >> "$archivo_conf"
	echo "PROCDIR=$PROCDIR=$user=`date`" >> "$archivo_conf"
	echo "LOGDIR=$LOGDIR=$user=`date`" >> "$archivo_conf" 
	echo "LOGEXT=$LOGEXT=$user=`date`" >> "$archivo_conf"	
	echo "LOGSIZE=$LOGSIZE=$user=`date`" >> "$archivo_conf"
}


#Finaliza la instalacion
function f_FIN()
{
	if [ $1 -eq 1 ]; then
		msg="Finalizó la instalación correctamente"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
	else
		msg="Proceso de instalación cancelado"	
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		exit
	fi	
		
	return 0
}



##################################################### PRINCIPAL ################################################


#echo $grupo
#aux=`cut -d '/inst' -f2 $"$grupo"`
#echo $aux
#grupo=`echo $aux`

clear

echo "Preparando instalación instalacion ......"

f_inicializar_log

f_detectar_instalacion

if [ $instalacion_existe -eq 1 ]; then
	#leemos definicioes de config	
	f_leer_config	
	f_verificar_paquete
	f_mostrar_componentes
	
	if [ $integridad_paquete -eq 1 ]; then
		msg="Estado de la instalación COMPLETA"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		instalar=0
	else
		f_mostrar_componentes_faltantes
		msg="Estado de la instalación INCOMPLETA"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		msg="Desea completar la instalación? (S\N)"
		echo $msg
		./Grabar_L.sh Instalar_A "$msg" -i
		f_esperar_respuesta
		
		if [ $confirmado -eq 1 ]; then
			instalar=1
		else
			instalar=0
		fi
	fi
else
	instalar=1
fi

#Set up
if [ $instalar -eq 1 ]; then
	#instalacion existe, pero hay componentes faltantes
	if [ $instalacion_existe -eq 1 ]; then 
		f_version_perl
		if [ $instalar -eq 1 ]; then
			f_mostrar_definiciones
			msg="Estado de la instalacion LISTA"
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i	
			
			msg="Procedemos con instalacion? (S/N)"
			echo $msg
			./Grabar_L.sh Instalar_A "$msg" -i					
			f_esperar_respuesta

			if [ $confirmado -eq 0 ]; then
				clear
			fi
		fi
	#instalacion no existe
	else 
		f_aceptar
			
		if [ $instalar -eq 1 ]; then
			f_version_perl	
		fi

		confirmado=0
		while [ $instalar -eq 1 -a $confirmado -eq 0 ]; do
		
				f_directorio_ejecutables
				f_directorio_maestros
				f_directorio_externos
				f_espacio_minimo
		
				if [ $instalar -eq 1 ]; then
					f_directorio_aceptados
					f_directorio_rechazados
					f_directorio_procesados
					f_directorio_listados
					f_directorio_log
					f_ext_size_log

					f_mostrar_definiciones
					msg="Estado de la instalacion LISTA"
					echo $msg
					./Grabar_L.sh Instalar_A "$msg" -i
					
					msg="Procedemos con instalacion? (S/N)"
					echo $msg
					./Grabar_L.sh Instalar_A "$msg" -i					
					f_esperar_respuesta

					if [ $confirmado -eq 0 ]; then
						clear
					fi
				fi
		done
	fi
fi

if [ $instalar -eq 1 ]; then
	msg="Iniciando Instalación. Esta Ud. seguro? (S/N)"
	echo $msg
	./Grabar_L.sh Instalar_A "$msg" -i
	f_esperar_respuesta
	
	if [ $confirmado -eq 1 ]; then
		instalar=1
	else
		instalar=0
	fi
fi

if [ $instalar -eq 1 ]; then
	f_instalacion
fi

f_FIN $instalar
#Instalacion concluida
